// Dockerfile.dev

FROM node:alpine

WORKDIR '/app'

COPY package.json .
RUN npm install

COPY ..

CMD ["npm", "run", "start"]

=> docker build -f Dockerfile.dev .

// docker-compose.yml

version: '3'
services:
  web:
    build: 
      context: .
      dockerfile: Dockerfile.dev
    ports:
      - "3000:3000"
    volumes:
     - /app/node_modules
     - .:/app
  test:
    build
      context: .
      dockerfile: Dockerfile.dev
    volumes:
      - /app/node_modules
      - . :/app
    command: ["npm", "run", "test"]
    
// Dockerfile

FROM node:alpine as builder
WORKDIR '/app'
COPY package.json .
RUN npm install
COPY . .
RUN npm run build

FROM nginx
EXPOSE 80
COPY --from=builder /app/build /usr/share/nginx/html

// TravisCI .travis.yml
sudo: required
services:
  - docker
  
before_install:
  - docker build -t huy/docker-react -f Dockerfile.dev .

script:
  - docker run huy/docker-react npm run test -- --coverage
  
deploy:
  provider: elasticbeanstalk
  region: "us-west-2"
  app: "docker"
  env: "Docker-env"
  bucket_name: "elasticbeanstalk-us-west-...."
  bucket_path: "docker"
  on:
    branch: master
  access_key_id: $AWS_ACCESS_KEY
  secret_access_key:
    secure: "$AWS_SECRET_KEY"
    
    
      